package com.broada.apm.indicator.api;

import java.util.Date;
import java.util.List;

import com.broada.apm.model.Service;

public interface ServiceService {
	
	/**
	 * 添加服务节点(业务组件)
	 * @param node
	 */
	public void addService(Service service);
	
	/**
	 * 修改服务节点
	 * @param service
	 */
	public void updateService(Service service);
	
	/**
	 * 删除服务节点
	 * @param service
	 */
	public void deleteService(Service service);
	
	/**
	 * 查询所有已关注的服务节点
	 */
	public List<Service> getAllFocusedDisService();
	
	/**
	 * 根据服务节点id查询
	 * @param serviceId
	 * @return
	 */
	public Service getServiceById(String serviceId);
	
	/**
	 * 根据应用系统id查询服务节点
	 * @param appId
	 * @return
	 */
	public List<Service> getServicesByAppId(String appId);

	/**
	 * 删除应用系统关联的服务节点
	 * @param appId
	 */
	public void deleteServiceByAppId(String appId);

	/**
	 * 查询集群子节点
	 * @param clusterId
	 * @return
	 */
	public List<Service> getChildServiceByClusterId(String clusterId);

	/**
	 * 通过IP和Port获取自动发现服务节点
	 * @param ip
	 * @param port
	 * @return
	 */
	public List<Service> getDisServiceByIpAndPort(String ip, int port);

	/**
	 * 根据自动发现服务节点id查询
	 * @param serviceId
	 * @return
	 */
	public Service getDisServiceById(String serviceId);

	/**
	 * 修改自动发现服务节点
	 * @param disService
	 */
	public void updateDisService(Service disService);

	public List<Service> getDisServiceByIpNum(long ipNum);

	/**
	 * 根据关键字模糊查询自动发现服务节点
	 * @param service
	 * @return
	 */
	public List<Service> getDisServiceByProtocal(Service service, String orderBy, boolean desc);

	/**
	 * 手动添加自动发现服务节点
	 * @param service
	 */
	public void addDisService(Service service);
	/**
	 * 插入或更新
	  * @Title: saveDisService
	  * @Description: 
	  * @param @param service
	  * @return void
	  * @throws
	 */
	public void saveDisService(Service service);

	/**
	 * 获取所有非集群节点
	 * @return 
	 */
	public List<Service> getAllServicesNotCluster();

	/**
	 * 根据服务ID获得SSL证书的实体
	 * @param serviceId
	 * @return
	 */
	public com.broada.apm.model.SSLCertificate getSSLBySericeId(String serviceId);

	/**
	 * 新增SSL证书实体
	 * @param convertFrontObjToDataObj
	 */
	public void addSSLCertificate(com.broada.apm.model.SSLCertificate sslCertificate);

	/**
	 * 更新SSL证书实体
	 * @param sslCertificate
	 */
	public void updateSSLCertificate(com.broada.apm.model.SSLCertificate sslCertificate);

	/**
	 * 删除SSL证书实体
	 * @param sslCertificate
	 */
	public void deleteSSLCertificate(com.broada.apm.model.SSLCertificate sslCertificate);

	/**
	 * 根据服务名称来查询服务节点
	 * @param service
	 * @param keyWord
	 * @param orderBy
	 * @param desc
	 * @return
	 */
	public List<com.broada.apm.model.Service> getDisServiceByKeyWord(com.broada.apm.model.Service service,
			String keyWord, String orderBy, boolean desc);

	/**
	 * 根据IP+PORT查找业务节点
	 * @param service
	 * @param orderBy
	 * @param desc
	 * @return
	 */
	public List<com.broada.apm.model.Service> getDisServiceByCondition(com.broada.apm.model.Service service,
			String orderBy, boolean desc);

	/**
	 * 删除手动添加节点
	 * @param service
	 */
	public void deleteDiscoveryService(com.broada.apm.model.Service service);

	/**
	 * 根据业务节点id查找topo节点
	 * @param id
	 * @return
	 */
	public List<com.broada.apm.model.Service> getTopoServiceBySerivceId(String id);

	/**
	 * 查找应用节点
	 * @param appId
	 * @param ip
	 * @param port
	 * @return
	 */
	public com.broada.apm.model.Service getAppServiceByIpAndPort(String appId, String ip, int port);

	/**
	 * 查询时候关注的服务节点
	 * @param ip
	 * @param serviceType
	 * @param focus
	 * @return
	 */
	public List<com.broada.apm.model.Service> getDisServiceFocusOrNot(com.broada.apm.model.Service service, String serviceType, String orderByMysql, boolean desc, int pageSize, int pageIndex, int serverity, Date startDate, Date endDate);

	/**
	 * 查询服务节点个数或被关注的服务节点个数
	 * @param i
	 * @return
	 */
	public int getServiceCount(int i);

	/**
	 * 关注或取消关注服务节点
	 * @param convertFrontObjToDataObj
	 */
	public void updateDisServiceFocus(com.broada.apm.model.Service convertFrontObjToDataObj);

	/**
	 * 查询标签节点
	 * @param ip
	 * @return
	 */
	public List<com.broada.apm.model.Service> queryDisServiceByLabelName(String ip);

	/**
	 * 查找此节点的过滤IP
	 * @param dstId
	 * @return
	 */
	public List<String> getIpsByServiceId(String dstId);

	/**
	 * 查找此节点应用系统下的所有节点的过滤IP
	 * @param appId
	 * @return
	 */
	public List<String> getIpsByAppId(String appId);

	/**
	 * 设置lua
	 * @param ser
	 */
	public void updateDisServiceLua(com.broada.apm.model.Service ser);
	
	/**
	 * 查询所有服务节点
	 * @return
	 */
	public List<Service> getAllDisService();

	public String getClusterServiceByChild(String serviceId);
	
	/**
	 * 根据serviceIds
	 * @param serviceIds
	 */
	public void deleteDiscoveryServiceByIds(List<String> serviceIds);

	/**
	 * 根据新数据，根据applicationId查询子节点id
	 * @param applicationId
	 * @return
	 */
	public List<String> getChildServiceIdsByApplicationId(String applicationId);
}
